//输入一个非负整数数组，把数组里所有数字拼接起来排成一个数，打印能拼接出的所有数字中最小的一个。 
//
// 
//
// 示例 1: 
//
// 输入: [10,2]
//输出: "102" 
//
// 示例 2: 
//
// 输入: [3,30,34,5,9]
//输出: "3033459" 
//
// 
//
// 提示: 
//
// 
// 0 < nums.length <= 100 
// 
//
// 说明: 
//
// 
// 输出结果可能非常大，所以你需要返回一个字符串而不是整数 
// 拼接起来的数字可能会有前导 0，最后结果不需要去掉前导 0 
// 
//
// Related Topics 贪心 字符串 排序 👍 631 👎 0


package leetcode.editor.cn;

// [剑指 Offer 45]把数组排成最小的数

import java.util.Arrays;
import java.util.Comparator;

public class BaShuZuPaiChengZuiXiaoDeShuLcof_JianZhiOffer45 {
    public static void main(String[] args) {
        Solution solution = new BaShuZuPaiChengZuiXiaoDeShuLcof_JianZhiOffer45().new Solution();
        solution.minNumber(new int[]{3, 30, 2});
        String a = "3";
        String b = "30";
        System.out.println((a + b).compareTo(b + a));
        System.out.println((b + a).compareTo(a + b));
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public String minNumber(int[] nums) {
            if (nums.length == 0) {
                return "0";
            }
            String[] strings = new String[nums.length];
            for (int i = 0; i < nums.length; i++) {
                strings[i] = Integer.toString(nums[i]);
            }
            Arrays.sort(strings, new Comparator<String>() {
                @Override
                public int compare(String o1, String o2) {
                    return Integer.compare((o1 + o2).compareTo(o2 + o1), 0);
                }
            });
            StringBuilder ans = new StringBuilder();
            for (String string : strings) {
                ans.append(string);
            }
            return ans.toString();
        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}